package com.lxy.common;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;

/**
 *
 */
@Data
@Slf4j
public class JsonResult<T> implements Serializable {
    private String  code;
    private String msg;
    private T data;

    public JsonResult() {
        this.code = "200";
        this.msg = "SUCCESS";
    }

    public static JsonResult ok() {
        JsonResult jsonResult = new JsonResult();
        jsonResult.code = "200";
        setDefaultEmptyData(jsonResult);
        return jsonResult;
    }

    public static JsonResult ok(Object data) {
        JsonResult jsonResult = JsonResult.ok();
        jsonResult.data = data;
        setDefaultEmptyData(jsonResult);
        return jsonResult;
    }

    public static JsonResult ok(String msg) {
        JsonResult jsonResult = JsonResult.ok();
        jsonResult.msg = msg;
        setDefaultEmptyData(jsonResult);
        return jsonResult;
    }

    public static JsonResult ok(String msg, Object data) {
        JsonResult jsonResult = JsonResult.ok();
        jsonResult.msg = msg;
        jsonResult.data = data;
        setDefaultEmptyData(jsonResult);
        return jsonResult;
    }

    public static JsonResult error() {
        JsonResult jsonResult = new JsonResult();
        jsonResult.msg="error";
        jsonResult.code = "500";
        setDefaultEmptyData(jsonResult);
        return jsonResult;
    }

    public static JsonResult error(String msg) {
        JsonResult jsonResult = JsonResult.error();
        jsonResult.msg = msg;
        setDefaultEmptyData(jsonResult);
        return jsonResult;
    }

    public static JsonResult error(String code, String msg) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.code = code;
        jsonResult.msg = msg;
        setDefaultEmptyData(jsonResult);
        return jsonResult;
    }

    private static void setDefaultEmptyData(JsonResult jsonResult) {
        if (jsonResult.data == null) {
            jsonResult.data = new JSONObject();
        }
        log.info(JSONUtil.toJsonStr(jsonResult));
    }

}
